/* 
函数重载: 函数名相同, 而形参不同的多个函数
*/
/* 
需求: 我们有一个add函数，它可以接收2个string类型的参数进行拼接，
  也可以接收2个number类型的参数进行相加 
*/

(() => {

  // 函数重载声明
  function add (x: string, y: string): string
  function add (x: number, y: number): number

  function add(x: string|number, y: string|number): string|number {
    if (typeof x==='string' && typeof y==='string') {
      return x + y
    } else if (typeof x==='number' && typeof y==='number') {
      return x + y
    }
  }

  console.log(add(2, 3))  // 5
  console.log(add('abc', 'cba')) // abccba

  // console.log(add(2, 'abc')) // error
  // console.log(add('abc', 3)) // error

  
})()